#!/usr/bin/env python3
"""
perl-Date-Manip MCP Server

面向 perl-Date-Manip 软件的 MCP server，提供对 dm_date 和 dm_zdump 命令行工具的封装。

MCP tools 列表：
1. dm_date_tool - 执行 dm_date 命令，用于日期格式化和转换
   参数：help_flag, date_str, date_short, file_path, file_short, reference, reference_short, rfc_flag, utc_flag, universal_flag, format_str
   返回：统一的命令执行结果 JSON

2. dm_zdump_tool - 执行 dm_zdump 命令，用于时区信息查询
   参数：help_flag, verbose_flag, verbose_short, cutoff_year, cutoff_short, timezone
   返回：统一的命令执行结果 JSON
"""

from mcp.server.fastmcp import FastMCP, Context
import subprocess
import json
from typing import List, Optional

mcp = FastMCP("Perl-Date-Manip MCP Server")

@mcp.tool()
def dm_date_tool(
    help_flag: bool = False,
    date_str: Optional[str] = None,
    date_short: Optional[str] = None,
    file_path: Optional[str] = None,
    file_short: Optional[str] = None,
    reference: Optional[str] = None,
    reference_short: Optional[str] = None,
    rfc_flag: bool = False,
    utc_flag: bool = False,
    universal_flag: bool = False,
    format_str: Optional[str] = None
) -> dict:
    """
    执行 dm_date 命令，用于日期格式化和转换
    
    参数:
        help_flag: 是否显示帮助信息
        date_str: 使用 --date 选项指定日期字符串
        date_short: 使用 -d 选项指定日期字符串
        file_path: 使用 --file 选项指定日期文件路径
        file_short: 使用 -f 选项指定日期文件路径
        reference: 使用 --reference 选项指定参考文件
        reference_short: 使用 -r 选项指定参考文件
        rfc_flag: 是否使用 --rfc-2822 格式输出
        utc_flag: 是否使用 --utc 选项（UTC时间）
        universal_flag: 是否使用 --universal 选项（通用时间）
        format_str: 输出格式字符串（如 +'%a, %d %b %Y %H:%M:%S %z'）
    
    返回:
        {
            "success": bool,      # 命令是否成功执行
            "command": str,       # 实际执行的命令
            "exit_code": int,     # 命令退出码
            "stdout": str,        # 标准输出
            "stderr": str         # 标准错误
        }
    """
    cmd_parts = ["dm_date"]
    
    if help_flag:
        cmd_parts.append("--help")
    if date_str:
        cmd_parts.extend(["--date", date_str])
    if date_short:
        cmd_parts.extend(["-d", date_short])
    if file_path:
        cmd_parts.extend(["--file", file_path])
    if file_short:
        cmd_parts.extend(["-f", file_short])
    if reference:
        cmd_parts.extend(["--reference", reference])
    if reference_short:
        cmd_parts.extend(["-r", reference_short])
    if rfc_flag:
        cmd_parts.append("--rfc-2822")
    if utc_flag:
        cmd_parts.append("--utc")
    if universal_flag:
        cmd_parts.append("--universal")
    if format_str:
        cmd_parts.append(format_str)
    
    command = " ".join(cmd_parts)
    
    try:
        result = subprocess.run(cmd_parts, capture_output=True, text=True, timeout=30)
        return {
            "success": result.returncode == 0,
            "command": command,
            "exit_code": result.returncode,
            "stdout": result.stdout,
            "stderr": result.stderr
        }
    except Exception as e:
        return {
            "success": False,
            "command": command,
            "exit_code": -1,
            "stdout": "",
            "stderr": str(e)
        }

@mcp.tool()
def dm_zdump_tool(
    help_flag: bool = False,
    verbose_flag: bool = False,
    verbose_short: bool = False,
    cutoff_year: Optional[str] = None,
    cutoff_short: Optional[str] = None,
    timezone: Optional[str] = None
) -> dict:
    """
    执行 dm_zdump 命令，用于时区信息查询
    
    参数:
        help_flag: 是否显示帮助信息
        verbose_flag: 是否使用 --verbose 选项显示详细信息
        verbose_short: 是否使用 -v 选项显示详细信息
        cutoff_year: 使用 --cutoff 选项指定截止年份
        cutoff_short: 使用 -c 选项指定截止年份
        timezone: 时区名称（如 PRC、Asia/Shanghai 等）
    
    返回:
        {
            "success": bool,      # 命令是否成功执行
            "command": str,       # 实际执行的命令
            "exit_code": int,     # 命令退出码
            "stdout": str,        # 标准输出
            "stderr": str         # 标准错误
        }
    """
    cmd_parts = ["dm_zdump"]
    
    if help_flag:
        cmd_parts.append("--help")
    if verbose_flag:
        cmd_parts.append("--verbose")
    if verbose_short:
        cmd_parts.append("-v")
    if cutoff_year:
        cmd_parts.extend(["--cutoff", cutoff_year])
    if cutoff_short:
        cmd_parts.extend(["-c", cutoff_short])
    if timezone:
        cmd_parts.append(timezone)
    
    command = " ".join(cmd_parts)
    
    try:
        result = subprocess.run(cmd_parts, capture_output=True, text=True, timeout=30)
        return {
            "success": result.returncode == 0,
            "command": command,
            "exit_code": result.returncode,
            "stdout": result.stdout,
            "stderr": result.stderr
        }
    except Exception as e:
        return {
            "success": False,
            "command": command,
            "exit_code": -1,
            "stdout": "",
            "stderr": str(e)
        }

if __name__ == "__main__":
    mcp.run()